/* 
 * @(#)PrivilegioBean.java 
 *  
 * Esta clase presenta la informacion de un privilegio.  
 * 
 * @version 1.0
 * @date 01/11/12 
 * @author Nelson Chicas
 *  
 */
package muhnes.sizoo.controlador;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;
import muhnes.sizoo.dal.FabricaDAO;
import muhnes.sizoo.dal.ObjetoDao;
import muhnes.sizoo.dal.OperacionDao;
import muhnes.sizoo.dal.PrivilegioDao;
import muhnes.sizoo.modelo.Objeto;
import muhnes.sizoo.modelo.Operacion;
import muhnes.sizoo.modelo.Privilegio;
import muhnes.sizoo.util.Transaccion;

/**
 * Clase controladora que se encarga de dar mantenimiento
 * a la vista de privilegios
 * 
 */
@ManagedBean(name = "privilegioBean")
@ViewScoped
public class PrivilegioBean extends CRUDBean< Privilegio, PrivilegioDao > 
    implements Serializable {
    
    private List< SelectItem > itemsBloqueado;
    private SelectItem[] itemsObjeto;
    private SelectItem[] itemsOperacion;
    private List< SelectItem > listaObjeto;
    private List< SelectItem > listaOperacion;

    public PrivilegioBean() {
        super( Privilegio.class );
        vistaProtegida = "privilegio";
    }
    
    /**
     * Metodo que obtiene todos los item de la clase objeto
     * @return una lista de objetos 
     */
    public SelectItem[] getItemsObjeto() {
            ObjetoDao objetoDao = FabricaDAO.crearObjetoDao();
            List<Objeto> objetos = objetoDao.buscarTodos();
            itemsObjeto = new SelectItem[objetos.size() + 1];
            itemsObjeto[0] = new SelectItem("","Seleccione...");
            for( int i = 0; i<objetos.size(); ++i ) {
                Objeto objeto = objetos.get(i);
                itemsObjeto[i+1] = new SelectItem (objeto.getNombre(),objeto.getNombre() );
            }
        return itemsObjeto;
    }
    
    /**
     * Metodo que obtiene una lista de la clase operacion
     * @return una lista de operaciones
     */
    public SelectItem[] getItemsOperacion() {
        OperacionDao operacionDao = FabricaDAO.crearOperacionDao();
            List<Operacion> operaciones = operacionDao.buscarTodos();
            itemsOperacion = new SelectItem[operaciones.size() + 1];
            itemsOperacion[0] = new SelectItem("","Seleccione...");
            for( int i = 0; i<operaciones.size(); ++i ) {
                Operacion operacion = operaciones.get(i);
                itemsOperacion[i+1] = new SelectItem (operacion.getNombre(),operacion.getNombre() );
            }
        return itemsOperacion;
    }
    
    /**
     * Metodo que obtiene los item que estan bloqueados para privilegios
     * @return un listado de objetos
     */
    public List<SelectItem> getItemsBloqueado() {
        if(itemsBloqueado == null){
            itemsBloqueado = new ArrayList< SelectItem >();
            itemsBloqueado.add( new SelectItem("","Seleccione...") );
            itemsBloqueado.add( new SelectItem(false,"No") );
            itemsBloqueado.add( new SelectItem(true,"Si") );
        }
        return itemsBloqueado;
    }
    
      /**
       * metodo para obtener una lista de todos los objetos
       * @return un listado de item
       */  
     public List< SelectItem > getListaObjeto() {
        if( listaObjeto == null ) {
            listaObjeto = new ArrayList< SelectItem >();
            ObjetoDao objetoDao = FabricaDAO.crearObjetoDao();
            for( Objeto objeto : objetoDao.buscarTodos() ) {
                Objeto ob = objetoDao.removerProxy(objeto);
                SelectItem item = new SelectItem( ob, ob.getNombre() );
                listaObjeto.add( item );
            }
        }
        return listaObjeto;
    }
     /**
      * Metodo para obtener todas las operaciones que estan asignadas
      * @return lista de item operacion
      */
     public List< SelectItem > getListaOperacion() {
        if( listaOperacion == null ) {
             listaOperacion = new ArrayList< SelectItem >();
            OperacionDao operacionDao = FabricaDAO.crearOperacionDao();
            for( Operacion operacion : operacionDao.buscarTodos() ) {
                Operacion o = operacionDao.removerProxy(operacion);
                SelectItem item = new SelectItem( o, o.getNombre() );
                 listaOperacion.add( item );
            }
        }
        return  listaOperacion;
    }

    @Override
    protected PrivilegioDao getDAO () {
        return FabricaDAO.crearPrivilegioDao();
    }

    @Override
    protected boolean debeValidar (Transaccion transaccion) {
        boolean validacion = false;
        
        switch( transaccion ) {
            case INSERCION:
            case ACTUALIZACION:
            case ELIMINACION:
                validacion = true;
        }
        
        return validacion;
    }

}


